"""
张量属性：dtype, device, layout
"""

import torch

dev = torch.device("cpu")

if __name__ == '__main__':
    a = torch.tensor([2, 2], device=dev)
    print(a)

    dev = torch.device("cuda:0")

    a = torch.tensor([2, 2], device=dev)
    print(a)

    a = torch.tensor([2, 2], dtype=torch.float32, device=dev)
    print(a)

    print()
    print("稀疏张量")

    # 非0元素的索引(对角线上：（0，0）， （1，1），（2，2））
    i = torch.tensor([[0, 1, 2], [0, 1, 2]])
    # 非0元素的值
    v = torch.tensor([1, 2, 3])
    # 使用i，v构造稀疏张量: shape=(4,4)
    a = torch.sparse_coo_tensor(i, v, (4, 4), device=dev, dtype=torch.float32)
    print(a)
    # tensor(indices=tensor([[0, 1, 2],
    #                        [0, 1, 2]]),
    #        values=tensor([1., 2., 3.]),
    #        device='cuda:0', size=(4, 4), nnz=3, layout=torch.sparse_coo)

    # 稀疏 -->  稠密 张量， 转换
    a = a.to_dense()
    print(a)
    # tensor([[1., 0., 0., 0.],
    #         [0., 2., 0., 0.],
    #         [0., 0., 3., 0.],
    #         [0., 0., 0., 0.]], device='cuda:0')
